home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / telecomm / fnordadl / fn132src.zoo / ref-man / theory.tex < prev    next >
Encoding:
Text File  |  1991-09-02  |  26.7 KB  |  669 lines

  1. @comment Tell Emacs to use -*-texinfo-*- mode
  2. @comment $Id: theory.tex,v 2.4 91/09/01 23:04:49 royce Exp $
  3.  
  4. @node Sysop Theory, User Command Reference, Fifteen Minute Guide, Top
  5. @chapter Sysop Theory
  6. @cindex Theory
  7. @cindex Sysop theory
  8.  
  9. Before getting into the nitty-gritty details of what buttons to push
  10. to get which results, let us first force down your throat some theory about
  11. what you're going to be dealing with.  You can forget about it after the
  12. final exam, if you wish.
  13.  
  14. @node Your Callers, Rooms, Sysop Theory, Sysop Theory
  15. @section Your Callers
  16. @cindex Callers
  17. @cindex Users, types of
  18.  
  19. You are presumably going through all of this because you
  20. wish to have people of some type call your system and do something
  21. with it.  These callers are your reason for running a @sc{bbs}.  While
  22. other systems offer a vast array of access and status levels,
  23. the general Citadel philosophy of simplicity holds here, meaning
  24. that there are no real preferential user access levels.
  25.  
  26. Despite that fact, there do need to be some ways to handle
  27. special cases.  @xref{User Status Commands}, for the commands to assign the
  28. various user attributes.  As of this writing, the attributes are:
  29.  
  30. @itemize @bullet
  31. @item
  32. @cindex Sysop
  33. @dfn{The Sysop}.  That's you, the System Operator, and there's only one of you
  34. unless you share the duties with other people, or
  35. somebody else has access to your computer while it's
  36. running Fnordadel.  You can do anything within reason,
  37. and a few things beyond reason.  Fnordadel allows you to define
  38. the name used by the Sysop in @file{ctdlcnfg.sys}, using the parameter
  39. @vindex sysop
  40. @code{#sysop}.  You should set this up correctly.  (If your system really
  41. has more than one Sysop, set the
  42. @vindex sysop
  43. @code{#sysop} parameter to whichever one
  44. has direct access to the system or uses the system most, or just pick a name
  45. from a hat.  Alternatively, leave
  46. @vindex sysop
  47. @code{#sysop} undefined.
  48. @xref{The Sysop Command Reference}, for more discussion on Sysop matters.)
  49.  
  50. @item
  51. @cindex Co-Sysop
  52. @dfn{Co-Sysops}.  You may additionally designate any number of other
  53. users on your system as ``Co-Sysops'', by assigning them Sysop privileges.
  54. This means that they have virtually
  55. unlimited ability to use any command, @emph{except} those in the
  56. Sysop menu (accessed by @samp{^L} at the main room prompt).
  57. To let such people have access to the Sysop menu as well, you need
  58. to give them the system password.  Note that anyone who has
  59. been given Sysop privs is also automatically given Aide privs.
  60.  
  61. @item
  62. @cindex Aide
  63. @dfn{Aides}.  These are people that you wish to have help you
  64. operate, maintain and control your system.  They can do things
  65. like delete, copy or move messages, and they may do a certain
  66. amount of room editing, floor maintenance and other things.  In
  67. general, however, they can't do much to change the basic nature
  68. of things (e.g. alter networking parameters, do things involving
  69. access to your storage devices, etc.).
  70.  
  71. @item
  72. @cindex Twit
  73. @dfn{Twits}.  These are users that you have decided are too
  74. detrimental to have continued access to your system, but
  75. whose user accounts you don't simply wish to kill, lest
  76. they immediately sign back on again and continue where
  77. they left off.  Twits have most commands disabled; this
  78. includes the ability to post messages!
  79.  
  80. @item
  81. Everybody else.  This is the group of people who are
  82. not the Sysop, Co-Sysops, Aides, or Twits.  They comprise the bulk of
  83. your user population, most likely.
  84. @end itemize
  85.  
  86. Additionally, the Sysop has control over users' ability to do certain things like
  87. send private mail, create new discussion rooms, and post in
  88. networked rooms.  (Such rooms may well be connected to long-distance
  89. systems, and we don't want irresponsible or evil
  90. users causing big phone bills!)
  91.  
  92. When you first start your system, it is unlikely that you will
  93. wish to grant Aide or Co-Sysop status to many of your users, since you probably
  94. won't know many of them at all well.  Our advice is to take your time, and
  95. pick out some people who will handle the positions responsibly.  If chosen
  96. wisely, they will be an asset in controlling your system, and in making
  97. creative contributions which prevent stagnation.
  98.  
  99. @node Rooms, Floors, Your Callers, Sysop Theory
  100. @section Rooms
  101. @cindex Rooms
  102.  
  103. Right from the start, Citadel made use of something called a
  104. @cindex Room
  105. @dfn{room} to contain messages on a related topic.  Fnordadel does
  106. the same.  A room has a name up to 19 characters in length, which
  107. presumably captures the gist of a topic to be discussed by the
  108. messages in that room.  Some systems you may be familiar with make
  109. use of ``message areas'', ``message bases'', ``SIGs'' (Special Interest
  110. Groups), etc.  They are all basically analogous to rooms, but will
  111. typically be few in number and cover broad, static topics.
  112.  
  113. Other systems make use of ``threads'', in which messages are
  114. related to each other by a common subject field (for example) rather
  115. than physical location.  Callers travel up and down the threads one
  116. message at a time, and now and then jump to a new thread.  Still
  117. other systems have no way to organise messages; they are all stored
  118. in one giant mass that is hard to wade through as a user, and still
  119. preserve one's sanity.
  120.  
  121. We feel that Citadel's room metaphor is much easier to use
  122. than a threading scheme, offers better organization than one massive
  123. message area, and permits better dynamic flow of discussion than
  124. bulky SIGs or message bases.
  125.  
  126. As callers use your system, they will move from room to room
  127. reading new messages, and posting replies as they see fit.  If the
  128. topic of a room drifts off on a tangent (as is common), you as
  129. Sysop may exercise control to bring it back on track, change its
  130. name to suit the new trend of discussion, move the off-topic messages
  131. into a newly-created room, or kill the room entirely if none of the
  132. above options are worth the effort.
  133.  
  134. The basic room can be specialised in a number of ways to
  135. meet various needs.  Some of the attributes are:
  136.  
  137. @itemize @bullet
  138. @item
  139. @cindex Permanent (room type)
  140. @dfn{Permanent}.  Normally, empty rooms will be purged by the
  141. system from time to time.  There is also a command for
  142. doing this explicitly (see @code{.A(ide) D(elete-empty-rooms)} in
  143. @ref{The .A(ide) command}).  You may
  144. not always wish rooms to disappear if they go empty, so
  145. you may designate them permanent, and they will stick
  146. around.
  147.  
  148. @item
  149. @cindex Anonymous (room type)
  150. @dfn{Anonymous}.  Rooms of this type are used for discussions
  151. where callers may wish to remain totally unidentified.
  152. None of the usual message header information is stored or
  153. shown by the system, just a message number.
  154.  
  155. @item
  156. @cindex Private (room type)
  157. @dfn{Private}.  These rooms are for carrying out activities
  158. that are not to be viewed by all callers to the system.
  159. Only users who are told of the complete room name are
  160. able to get into it.  And once a user knows the room's
  161. name, he can't be barred from it short of altering the
  162. name and reinviting all the other users.
  163.  
  164. @item
  165. @cindex Invitation-only (room type)
  166. @dfn{Invitation-only}.  These rooms are just like the above
  167. type, with one difference.  Users must be invited into
  168. them with a system command; knowing the full name is not
  169. sufficient to gain access.  If a caller's presence is no
  170. longer desired, eviction from the room is also easily
  171. possible, without choosing a new room name.
  172.  
  173. @item
  174. @cindex Read-only (room type)
  175. @dfn{Read-only}.  Rooms of this type can only have messages
  176. entered in them by the Sysop, Co-Sysops or Aides.  A typical use for
  177. such a room is for announcements that you wish people to
  178. have access to, uncluttered by comments from other callers.
  179.  
  180. @item
  181. @cindex Directory (room type)
  182. @dfn{Directory}.  Rooms of this type are used to give callers
  183. access to your storage device(s) (@sc{ram}, disk or hard drives),
  184. for the purposes of file uploading and/or downloading.
  185. Each directory room is tied to a specific disk directory
  186. somewhere, so you can give different people access to
  187. different collections of files.  Normal discussion
  188. activities are permissable in directory rooms.
  189.  
  190. @item
  191. @cindex Network (room type)
  192. @cindex Shared (room type)
  193. @dfn{Network} or @dfn{Shared}.  Rooms of this type are linked via the
  194. Citadel network (or any other supported) to other systems
  195. that also carry the same rooms.  Messages entered in
  196. these rooms will be transferred among all the systems
  197. sharing the room, thus permitting a much larger cross-section
  198. of callers to participate in the discussion, no
  199. matter their geographical locations.
  200. @end itemize
  201.  
  202. Note that these attributes can be mixed, so it is possible to
  203. have, say, a shared, directory, read-only, private, anonymous, permanent room.
  204.  
  205. In order to distinguish between the different types of room that can
  206. be found, Fnordadel adds a special character following the room name in many
  207. places where room names are shown.  They are as follows:
  208.  
  209. @table @samp
  210. @item ]
  211. designates a directory room
  212. @item )
  213. designates a shared (network) room
  214. @item :
  215. designates a shared directory room
  216. @item >
  217. designates all other types of room
  218. @end table
  219.  
  220. From time to time in the following chapters, you will see references
  221. to the term
  222. @cindex Room prompt
  223. @dfn{room prompt}.  The room prompt is where users are sitting
  224. on the
  225. system when nothing is going on, and Fnordadel is waiting for a command to
  226. be entered.  It's called the @emph{room} prompt because the system displays the
  227. name of the room in which the user is sitting.
  228.  
  229. @node Floors, Scrolling, Rooms, Sysop Theory
  230. @section Floors
  231. @cindex Floors
  232.  
  233. Some years after the development of Citadel, numerous
  234. systems were getting to be quite large.  Rooms permit the organization
  235. of messages, but when there are 50 and more rooms, they need to be
  236. organized themselves.  Thus
  237. @dfn{floors} were developed, and are to rooms
  238. as rooms are to messages: rooms group related messages, while
  239. floors group related rooms.
  240.  
  241. If callers choose not to operate in floor mode, they will
  242. see your system as it would have been before floors came about.  If
  243. @cindex Floor mode
  244. they choose floor mode, however, they will see collections of rooms
  245. through which they can navigate, in addition to normal room-to-room
  246. movement.  This permits efficient activites with groups of rooms.
  247. Usually all rooms on a floor are somehow related, just as all messages
  248. in a room are related.  The advantage of this is extra organization
  249. that doesn't get in anybody's way.  Even if floor mode is chosen by
  250. a user, it does not add any inconvenience to his/her use of the system.
  251.  
  252. @node Scrolling, Modes of Operation, Floors, Sysop Theory
  253. @section Scrolling
  254. @cindex Scrolling
  255. @cindex Wrap-around
  256.  
  257. @dfn{Scrolling} is a term commonly used to describe the way
  258. many aspects of a Citadel work.  A good mental
  259. image of scrolling is simply to picture any circular, oval, or
  260. otherwise closed, race-track.  Racers on the track start at the
  261. beginning, and loop around it forever after, unless somebody or
  262. something stops them.
  263.  
  264. A number of things in Fnordadel also scroll.  The largest
  265. is probably going to be the message file, which is where all the
  266. messages entered in all the rooms are kept.  Messages get placed into
  267. it at the beginning, and continue being added until the physical end
  268. of the file is reached.  At this time Fnordadel (and all Citadels)
  269. loops back to the start and overwrites old messages there with
  270. continued new entries.  In this fashion, your system efficiently
  271. organizes all messages on your storage device for you, and also
  272. automatically deletes old messages.
  273.  
  274. If you find that the message file scrolls faster than you
  275. would like, increase its size with the @code{mexpand} utility (see
  276. @pindex mexpand
  277. @file{mexpand.man}).  Conversely, if the file is not scrolling fast enough,
  278. @pindex mshrink
  279. decrease its size with the @code{mshrink} utility (see @file{mshrink.man}).
  280.  
  281. Another thing that scrolls is your user file.  This file
  282. contains all information known about your users, and has space for
  283. a fixed number of users, which you specify.  When that space is
  284. used up, the next new user to sign onto your system will cause the
  285. user file to scroll.  The system picks the user who has not signed
  286. on for the longest period of time, and tosses the account to make
  287. room for the new arrival.  Again, efficient use of storage, and no
  288. maintenance for the Sysop.  (Note that the system will scroll you
  289. and your Aides and Co-Sysops with equal efficiency, so be sure you all
  290. sign on regularly!)
  291.  
  292. Room contents are yet another thing that --- you guessed it ---
  293. scroll.  This is because the messages in rooms get overwritten by
  294. the scrolling action of the main message file.  Thus room content
  295. is always current to one degree or another (it depends how large the
  296. message file is), and the Sysop doesn't have to lift a finger to
  297. keep things that way.
  298.  
  299. @node Modes of Operation, Configuring, Scrolling, Sysop Theory
  300. @section Modes of Operation
  301. @cindex Modes of operation
  302.  
  303. Fnordadel has four distinct modes of operation, and it's
  304. a good idea to understand what the differences are, since they
  305. determine who can do what when.
  306.  
  307. @node Modem mode, Console mode, Modes of Operation, Modes of Operation
  308. @subsection Modem mode
  309. @cindex Modem mode
  310.  
  311. When you are not using the system, which is hopefully
  312. most of the time (unless you really like reading your own
  313. commentary), Fnordadel is in @dfn{modem mode}.  All this means is
  314. that it is ignoring almost everything typed at the console,
  315. and is either handling commands entered by a user who called, or
  316. else waiting for a call to come in.
  317.  
  318. There are only two ways out of modem mode.  The most
  319. common is for you, the Sysop, to hit the @samp{<ESC>} key at the
  320. console, and enter console mode (see below).  The other is
  321. for the software to crash in flames.  Fortunately, the latter
  322. never happens.
  323.  
  324. @node Console mode, Chat mode, Modem mode, Modes of Operation
  325. @subsection Console mode
  326. @cindex Console mode
  327.  
  328. When you are using the system, Fnordadel is in
  329. @dfn{console mode} (unless you dialed in from elsewhere, but that's
  330. cheating).  It is possible for the system to be in console
  331. mode while a user is connected from remote.  It is advised
  332. that you not enter console mode, however, except when the user
  333. is at a room prompt.  Otherwise, strange things may happen
  334. when you hit @samp{<ESC>} to take over.
  335.  
  336. When the system is in console mode, you can carry out
  337. normal @sc{bbs} activites such as reading and entering messages.
  338. If nobody is logged in, Fnordadel may restrict what you can
  339. do based on some of the settings in @file{ctdlcnfg.sys}.  See
  340. @file{ctdlcnfg.doc} for details.  In any case, being in console mode
  341. will let you do most things, logged in or not, plus it also
  342. gets you access to the Sysop special functions menu without having
  343. to enter the system password.  @xref{The Sysop Command Reference}, for
  344. more details.
  345.  
  346. To return the system to modem mode --- which you must
  347. do in order for it to receive calls again, or for an online
  348. user to finish what he or she was up to --- use the @code{[M]odem mode}
  349. command in the Sysop menu.  Again, see @ref{The Sysop Command Reference}.
  350.  
  351. @node Chat mode, Network mode, Console mode, Modes of Operation
  352. @subsection Chat mode
  353. @cindex Chat mode
  354.  
  355. @dfn{Chat mode} is unlike the two previous modes in two ways.
  356. First, Fnordadel pays attention to characters coming in from
  357. both the console and the modem, and echoes all of them to the
  358. screen.  This is how you talk to your users when they're on the
  359. system.  Try it, you might like it!
  360.  
  361. Second, virtually no commands are available in chat
  362. mode.  It is intended for purely discussion purposes.  To exit
  363. chat mode, hit @samp{<ESC>}.  Fnordadel will return to either modem
  364. or console mode according to what mode was in effect when chat
  365. mode was started.  If the mode is console, don't forget to
  366. return Fnordadel to modem mode so the user can finish his or
  367. her activities.
  368.  
  369. Chat mode is also used when you dial out from your
  370. system and connect with other systems as a user, yourself.  In
  371. these cases you're chatting with another @sc{bbs} instead of a user.
  372. If you press @samp{<ESC>} while still online with a remote system,
  373. you'll probably want to reconnect with it once you've finished
  374. whatever caused you to hit @samp{<ESC>}.  To do this, just execute the
  375. @code{[C]hat} command yourself, or use the
  376. @code{[G]otomodem@dots{}} command from the
  377. Sysop menu.  @xref{Other room prompt commands}, and
  378. @ref{Sysop Special Functions}, for details.
  379.  
  380. @node Network mode,  , Chat mode, Modes of Operation
  381. @subsection Network mode
  382. @cindex Network mode
  383.  
  384. @dfn{Network mode} is unlike the previous three modes, in that
  385. nobody is logged in to the system.  Instead, it is communicating
  386. with other Citadel(s) of some kind, somewhere, for the purpose of
  387. transferring private mail, shared rooms, files, and so on.  When
  388. the system is in networking mode, nobody else can use it until it
  389. finishes what needs doing.  Clearly, the more time your system
  390. spends networking, the less time your users and yourself can be
  391. online.  So configure your network controls to give a good
  392. balance between system availability and timely communication
  393. with your networking partners.
  394.  
  395. @node Configuring, Command Structure, Modes of Operation, Sysop Theory
  396. @section Configuring
  397. @cindex Configuring
  398.  
  399. If you read @ref{Fifteen Minute Guide}, on how to start your system
  400. as quickly as possible, you will have encountered the instructions to
  401. modify a file called @file{ctdlcnfg.sys} and run a program called
  402. @code{configur}.
  403. @pindex configur
  404. Here is more treatment of that information, or a first look if you
  405. skipped that chapter like someone who wants to get all the facts before
  406. mucking with things.
  407.  
  408. @node ctdlcnfg.sys, configur, Configuring, Configuring
  409. @subsection The ctdlcnfg.sys file
  410. @cindex ctdlcnfg.sys (file)
  411.  
  412. This is the Fnordadel configuration file, an @sc{ascii}
  413. text file that can be edited with any text editor or word
  414. processor which can output @sc{ascii} files.  It contains a truck-load
  415. of system parameters and options that let you tell
  416. Fnordadel things it needs to know, and let you set up some
  417. non-essentials to give your system a unique flavour.  For
  418. details on the contents of this file, see @file{ctdlcnfg.doc}.
  419.  
  420. Please be sure that the contents of this file always
  421. accurately describe your system!  There are utility programs
  422. that will modify various parameters of your system, but they
  423. @emph{do not} alter the contents of @file{ctdlcnfg.sys}.  It is up to you to
  424. edit the file and change the appropriate values.  If you don't,
  425. @emph{pure evil} will result.
  426.  
  427. In order for the information in this file to actually
  428. get communicated to Fnordadel, it must be run through the
  429. configuration program, @code{configur}.  Speaking of which @dots{}
  430.  
  431. @node configur, ctdltabl.sys, ctdlcnfg.sys, Configuring
  432. @subsection The configur program
  433. @pindex configur
  434.  
  435. @code{configur} is the Fnordadel configuration program.  It
  436. processes everything you've entered in @file{ctdlcnfg.sys} and
  437. checks for errors of omission or commission, displaying
  438. error messages as necessary.  The error messages will hopefully
  439. pin-point the problem for you.  You can always look
  440. at @file{ctdlcnfg.doc} for a (bloated) example of a correct file.
  441.  
  442. If everything goes well, the result of running this
  443. program will be yet another file called @file{ctdltabl.sys}.
  444.  
  445. @node ctdltabl.sys,  , configur, Configuring
  446. @subsection The ctdltabl.sys file
  447. @cindex ctdltabl.sys (file)
  448.  
  449. This is the file which contains the distilled
  450. essence of @file{ctdlcnfg.sys}, in a binary form that Fnordadel can
  451. accept; it also contains various system tables (like indices
  452. into the message file, log file and so on) which change with
  453. time.  Fnordadel will not run if this file is not present,
  454. and it will die horribly or act terribly if the file is
  455. incomplete, corrupted, or otherwise screwed up.  Likewise with
  456. many of the Fnordadel utility programs.
  457.  
  458. For this reason, Fnordadel and some of the more
  459. complex utility programs will actually delete @file{ctdltabl.sys}
  460. when you run them, and then write it back out again when they
  461. exit properly. This prevents the ugly situation, for example,
  462. of running your Fnordadel for a few days, and having it
  463. crash messily, leaving around a @file{ctdltabl.sys} that no longer
  464. reflects the current status of your system.  If you tried to
  465. rerun your system without reconfiguring, it would be a Very
  466. Bad Thing.
  467.  
  468. As things stand, a bad crash by Fnordadel or a
  469. utility will leave you without @file{ctdltabl.sys}, forcing you
  470. to rerun @code{configur} before doing anything else.
  471. @pindex configur
  472.  
  473. This point bears emphasis: @emph{losing your @file{ctdltabl.sys}
  474. file means almost nothing}.  You can always regenerate it by
  475. running @code{configur}, as long as no other system files have
  476. been damaged or deleted.  If you suspect anything weird is
  477. going on with your system, the first thing you should do is
  478. @emph{back everything up}, and @emph{not} over top of an existing backup.
  479. The second thing to do is delete @file{ctdltabl.sys} and run
  480. @code{configur}.  Hopefully this will fix things up.
  481.  
  482. @node Command Structure,  , Configuring, Sysop Theory
  483. @section Command Structure
  484. @cindex Command structure
  485.  
  486. Before we start with particular groups of commands, let's
  487. look at the structure of Citadel commands.  One design
  488. feature of the command system is ``orthogonality'', which is a nice
  489. big word that roughly means ``consistency''.  Or, things look the
  490. same one place as in another.  Keep this in mind and it will speed
  491. you on your way to mastering the system's complexity.
  492.  
  493. Keep one other thing in mind:  At almost every conceivable
  494. point in the system where it is waiting for you to enter a command,
  495. you can press the @samp{?} key to see a list of the currently available
  496. commands.  ``This system of menus isn't quite as convenient as ones
  497. that pop up automatically as with other @sc{bbs}es'', argue some people,
  498. but it is another facet of Citadel's philosophy --- stay out of the
  499. way unless called for.
  500.  
  501. And now, the two basic types of commands.
  502.  
  503. @node About single-key commands, About extended commands, Command Structure, Command Structure
  504. @subsection Single-key commands
  505. @cindex Single-key commands
  506.  
  507. The so-called @dfn{single-key} commands are the basic
  508. bread and butter for you and your users.  They are the
  509. common functions that everybody wants to use all of the
  510. time, and they have been streamlined as much as possible
  511. to permit people to do what they want without wading though
  512. layers of barriers (what other systems call ``menus'').  These
  513. commands are all invoked by pressing a single key, and do
  514. not need to be followed by a carriage-return.
  515.  
  516. To be a successful Fnordadel user, you only have
  517. to know five of the single-key commands:
  518.  
  519. @itemize @bullet
  520. @item
  521. @code{[G]oto the next room}
  522.  
  523. @item
  524. @code{read [N]ew messages}
  525.  
  526. @item
  527. @code{[E]nter a message}
  528.  
  529. @item
  530. @code{[P]ause reading}
  531.  
  532. @item
  533. @code{[S]top reading}
  534. @end itemize
  535.  
  536. These five commands, along with the obvious need to
  537. know @code{[L]ogin}, @code{[?]} and @code{[T]erminate}, will satisfy most
  538. people who call.
  539.  
  540. @node About extended commands,  , About single-key commands, Command Structure
  541. @subsection Multi-key/extended commands
  542. @cindex Extended commands
  543. @cindex Multi-key commands
  544.  
  545. It would be nice if all functions of the software
  546. could be called up using single key-strokes.  Fortunately---yes, that's
  547. ``fortunately''---there
  548. are too many of them to permit this.  For example,
  549. there are those individuals who will want to be able to do
  550. things like compose messages (probably long ones) off-line
  551. and then upload them in one shot to your board.  There
  552. will be those people who will want to grab whatever
  553. downloadable files you've got on your board.  There will be
  554. those who want to upload stuff to your board.  (I know, it's
  555. hard to believe, but there is the occasional altruistic soul
  556. around.)  And, naturally, there will be those individuals
  557. who will want to do some odd variant of any of those things,
  558. or a host of others.  Yourself, Co-Sysops, and Aides are
  559. probably good examples of such people.
  560.  
  561. To accommodate this need, Fnordadel uses @dfn{multi-key}
  562. or @dfn{extended}, commands.  In contrast to the single-key
  563. commands, multi-key commands start with a mode character
  564. and are followed by a number of other command characters.
  565. Some extended commands also take a user name, file name or
  566. date; these must be terminated by a carriage return.
  567.  
  568. The mode character tells Fnordadel that you're
  569. using an extended command instead of a single-key command,
  570. and what type of extended command it will be.  Normal
  571. extended commands that deal with rooms, messages and files
  572. start with a period, @samp{.}.  Floor extended commands, which
  573. deal with entire floors, start with a semi-colon, @samp{;}.
  574. Door extended commands, which permit the running of other
  575. programs from within Fnordadel, start with an exclamation
  576. mark, @samp{!}.
  577.  
  578. Most extended commands will either be ``enter'' or
  579. ``read'' operations.  Citadel defines any command you use
  580. that results in data being sent to the system as an
  581. ``enter'' command.  Any command that results in data being
  582. sent from the system to you is a ``read'' command.
  583.  
  584. Thus, to read new messages in the current room, you
  585. could use the extended command
  586.  
  587. @example
  588. .rn
  589. @end example
  590.  
  591. @noindent
  592. which the system will display as:
  593.  
  594. @example
  595. .read new
  596. @end example
  597.  
  598. To download a file @file{blort.txt} using the Xmodem file transfer
  599. protocol, you would also do a read operation:
  600.  
  601. @example
  602. .rxfblort.txt<CR>
  603. @end example
  604.  
  605. @noindent
  606. which is displayed like:
  607.  
  608. @example
  609. .read xmodem file blort.txt
  610. @end example
  611.  
  612. @noindent
  613. followed by an ``are you ready'' sort of prompt.
  614.  
  615. To get even trickier, you could download all new messages
  616. in the current room from the user ``Foobar'' since 90Jul01, to
  617. your own system, using the Ymodem file transfer protocol, for
  618. leisurely perusal:
  619.  
  620. @example
  621. .ryu+nFoobar<CR>89Jul01<CR>
  622. @end example
  623.  
  624. @noindent
  625. which looks like:
  626.  
  627. @example
  628. .read ymodem user after new - which user: Foobar
  629. After what date: 89Jul01
  630. @end example
  631.  
  632. You may not notice, but in all these cases, there is a
  633. pattern to the command.  It always starts with a @samp{.}, then
  634. specifies the main command followed by some options, and
  635. finishes with what the command is supposed to deal with
  636. (``new'' implies ``new messages'', while ``file'' explicitly means
  637. ``files'').  The system will then prompt for further data as
  638. needed by some of the options.  To summarize the structure:
  639.  
  640. @example
  641. @var{<mode>} @var{<main command>} @var{<options>} @var{<what to process>}
  642. @var{<prompts for any additional data>}
  643. @end example
  644.  
  645. In the final example above, @samp{.ryu+n}, we have:
  646.  
  647. @table @var
  648. @item <mode>
  649. @samp{.} for ``extended command''
  650. @item <main command>
  651. @samp{r} for ``read''
  652. @item <options>
  653. @samp{yu+} for ``ymodem user after''
  654. @item <what to process>
  655. @samp{n} for ``new messages''
  656. @item <prompts>
  657. ``which user'' and ``After what date''
  658. @end table
  659.  
  660. This patterning, which aids a user in knowing what
  661. to expect and even helps him/her to anticipate how commands
  662. should be strung together, is the ``orthogonality'' mentioned
  663. before.  Orthogonal command structures always do the same
  664. or similar things in the same way, or by using the same
  665. structure.  It is one of the strengths of Citadel, and one
  666. of the glaring weaknesses of many other systems.  It makes
  667. your system look unlike anything you or your users may have
  668. encountered before, but we think it's worth it.
  669.